/*
 * Botonera.java
 * Copyright (C) 2007 Ezequiel Turovetzky
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package ar.com.botonera;

import java.io.File;
import java.util.List;

import ar.com.botonera.gui.SoundButton;
import ar.com.botonera.gui.menu.contextual.ContextualMenu;

/**
 * Botonera de la aplicaci&oacute;n.
 * @author <a href="mailto:tezequiel@gmail.com">Ezequiel Turovetzky</a>
 * @version 1.0
 */
public interface Botonera {
	
    /**
     * Agrega un bot&oacute;n a esta botonera.
     * @param button El bot&oacute;n a agregar.
     */
    public void addButton(SoundButton button);
    
    /**
     * Agrega un bot&oacute;n a la botonera a partir de un archivo.
     * <br>En caso de especificarse un directorio, se recorrer&aacute;
     * recursivamente el directorio y sus subdirectorios, agregando a
     * esta botonera <b>todos</b> los archivos <code>mp3</code> que se encuentren.
     * @param file Archivo o directorio a agregar a esta botonera.
     */
    public void addButton(File file);

    /**
     * Quita un bot&oacute;n de esta botonera.
     * @param button El bot&oacute;n a quitar.
     */
    public void removeButton(SoundButton button);
    
    /**
     * Devuelve una lista con todos los botones
     * de esta botonera.
     * @return Lista con todos los botones de esta botonera.
     */
    public List<SoundButton> getButtons();

    /**
     * Informa si existe un boto&oacute;n en la botonera con 
     * el label especificado.
     * @param label Label del bot&acute;n.
     * @return <code>true</code> si existe, <code>false</code> en caso opuesto.
     */
    public boolean containsButtonLabel(String label);
    
    /**
     * Establece la cantidad de botones por fila que se visualizan
     * en la botonera.
     * <br>Este m&eacute;todo es utilizado &uacute;nicamente para cambiar en tiempo
     * de ejecuci&oacute;n la forma en que se visualizan los botones.
     * @param buttonsPerRow de botones por fila que se visualizan en la botonea.
     */
    public void setButtonsPerRow(int buttonsPerRow);
    
    /**
     * Devuelve la cantidad de botones por fila que se visualizan
     * en la botonera.
     * @return Cantidad de botones por fila que se visualizan en la botonera.
     */
    public int getButtonsPerRow();
    
    /**
     * Informa si esta botonera tiene botones.
     * @return <code>true</code> si tiene botones, <code>false</code>
     * en caso opuesto.
     */
    public boolean hasButtons();
    
    /**
     * Devuelve la cantidad de botones que esta botonera tiene.
     * @return Cantidad de botones en la botonera.
     */
    public int getButtonCount();

    /**
     * Devuelve el men&uacute; contextual mostrado al hacer click
     * derecho sobre alg&uacute;n bot&oacute;n de la botonera.
     * @return El men&uacute; contextual.
     */
    public ContextualMenu getContextualMenu();
    
    
    /**
     * Quita todos los botones de esta botonera.
     */
    public void clear();
}
